import { SET_LIST, ADD_CART, CHANGE_COUNT, CHANGE_FLAG, ALL_CHECK } from '../../actions/index'
let initState = {
    allList: [],
    cartList: [],
    allC: false
}

export default function (state = initState, action) {

    let newState = JSON.parse(JSON.stringify(state))

    switch (action.type) {
        case SET_LIST:
            newState.allList = action.list
            return newState//{...state, allList: action.list}
        case ADD_CART:
            //方法一
            let flag = newState.cartList.some(item=>item.id === action.info.id)
            if(!flag){
                newState.cartList.push(action.info)
            }
            newState.cartList.forEach(item=>{
                if(item.id === action.info.id){
                    item.count++
                }
            })

            //添加商品
            // newState.cartList.push(action.info);
            // //筛选 
            // newState.cartList = newState.cartList.filter((item,index)=>{
            //     return newState.cartList.indexOf(item) ===  index
            // })

            // newState.cartList.forEach(item=>{
            //     if(item.id === action.info.id){
            //         item.count++
            //     }
            // })

            // 加入购物车
            // newState.allList.forEach(item => {
            //     // 修改all中点击的商品
            //     if (item.id === action.info.id) {
            //         item.count++
            //     }
            // })
            // // 查找购物车中是否有点击的商品
            // let goods = newState.cartList.find(item => item.id === action.info.id)
            // if (goods) {
            //     goods.count++
            // } else {
            //     newState.cartList.push({ ...action.info, count: 1 })
            // }
            //当全选 选中时  新加入商品 全选取消
            newState.allC = newState.cartList.every(item => item.flag)

            // return newState
            return {...newState,cartList:[...newState.cartList]}
        case CHANGE_COUNT:
            {
                // 想重复定义变量 用{}包起来
                // let goods = newState.cartList.find(item => item.id === action.id)
                // 修改商品数量
                let index = newState.cartList.findIndex(item => item.id === action.id);
                // alllist  商品列表  数量 改变
                newState.allList.forEach(item => {
                    // 修改all中点击的商品
                    if (item.id === action.id) {
                        item.count = action.count
                    }
                })
                if (action.count === 0) {
                    newState.cartList.splice(index, 1)
                } else {
                    newState.cartList[index].count = action.count
                }
                return newState
            }
        case CHANGE_FLAG:
            // input框
            newState.cartList.map(item => item.id === action.id ? item.flag = action.value : item.flag)
            //反选
            newState.allC = newState.cartList.every(item => item.flag)
            return newState
        case ALL_CHECK:
            //全选
            newState.cartList.map(item => item.flag = action.value)
            newState.allC = action.value
            return newState
        default:
            return state
    }
}